// remote scripting library
// (c) copyright 2005 modernmethod, inc
var sajax_debug_mode = false;
var sajax_request_type = "GET";
var sajax_target_id = "";
var sajax_failure_redirect = "";
var sajax_debug_mode = 0;

var job_id;

function sajax_debug(text) {
    if (sajax_debug_mode)
        alert(text);
}

function sajax_init_object() {
     sajax_debug("sajax_init_object() called..")
     
     var A;
     
     var msxmlhttp = new Array(
        'Msxml2.XMLHTTP.5.0',
        'Msxml2.XMLHTTP.4.0',
        'Msxml2.XMLHTTP.3.0',
        'Msxml2.XMLHTTP',
        'Microsoft.XMLHTTP');
    for (var i = 0; i < msxmlhttp.length; i++) {
        try {
            A = new ActiveXObject(msxmlhttp[i]);
        } catch (e) {
            A = null;
        }
    }
     
    if(!A && typeof XMLHttpRequest != "undefined")
        A = new XMLHttpRequest();
    if (!A)
        sajax_debug("Could not create connection object.");
    return A;
}

var sajax_requests = new Array();

function sajax_cancel() {
    for (var i = 0; i < sajax_requests.length; i++) 
        sajax_requests[i].abort();
}

function sajax_do_call(func_name, args) {
    var i, x, n;
    var uri;
    var post_data;
    var target_id;
    
    sajax_debug("in sajax_do_call().." + sajax_request_type + "/" + sajax_target_id);
    target_id = sajax_target_id;
    if (typeof(sajax_request_type) == "undefined" || sajax_request_type == "") 
        sajax_request_type = "GET";
    
    uri = "";
    if (sajax_request_type == "GET") {
    
        if (uri.indexOf("?") == -1) 
            uri += "?rs=" + escape(func_name);
        else
            uri += "&rs=" + escape(func_name);
        uri += "&rst=" + escape(sajax_target_id);
        uri += "&rsrnd=" + new Date().getTime();
        
        for (i = 0; i < args.length-1; i++) 
            uri += "&rsargs[]=" + escape(args[i]);

        post_data = null;
    } 
    else if (sajax_request_type == "POST") {
        post_data = "rs=" + escape(func_name);
        post_data += "&rst=" + escape(sajax_target_id);
        post_data += "&rsrnd=" + new Date().getTime();
        
        for (i = 0; i < args.length-1; i++) 
            post_data = post_data + "&rsargs[]=" + escape(args[i]);
    }
    else {
        alert("Illegal request type: " + sajax_request_type);
    }
    
    x = sajax_init_object();
    if (x == null) {
        if (sajax_failure_redirect != "") {
            location.href = sajax_failure_redirect;
            return false;
        } else {
            sajax_debug("NULL sajax object for user agent:\n" + navigator.userAgent);
            return false;
        }
    } else {
        x.open(sajax_request_type, uri, true);
        // window.open(uri);
        
        sajax_requests[sajax_requests.length] = x;
        
        if (sajax_request_type == "POST") {
            x.setRequestHeader("Method", "POST " + uri + " HTTP/1.1");
            x.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
        }
    
        x.onreadystatechange = function() {
            if (x.readyState != 4) 
                return;

            sajax_debug("received " + x.responseText);

            var status;
            var data;
            var txt = x.responseText.replace(/^\s*|\s*$/g,"");
            status = txt.charAt(0);
            data = txt.substring(2);

            if (status == "") {
                // let's just assume this is a pre-response bailout and let it slide for now
            } else if (status == "-") 
                alert("Error: " + data);
            else {
                if (target_id != "") 
                    document.getElementById(target_id).innerHTML = eval(data);
                else {
                    try {
                        var callback;
                        var extra_data = false;
                        if (typeof args[args.length-1] == "object") {
                            callback = args[args.length-1].callback;
                            extra_data = args[args.length-1].extra_data;
                        } else {
                            callback = args[args.length-1];
                        }
                        callback(eval(data), extra_data);
                    } catch (e) {
                        sajax_debug("Caught error " + e + ": Could not eval " + data );
                    }
                }
            }
        }
    }
    
    sajax_debug(func_name + " uri = " + uri + "/post = " + post_data);
    x.send(post_data);
    sajax_debug(func_name + " waiting..");
    delete x;
    return true;
}
        
// wrapper for ajax_jobinfo        
function x_ajax_jobinfo() {
    sajax_do_call("ajax_jobinfo",
        x_ajax_jobinfo.arguments);
}

function jobinfo_cb(x) {
    document.getElementById(job_id).setAttribute("length", x.length);
    document.getElementById(job_id).innerHTML = x;
}

function do_expandJobInfo(id) {

    var jobname;
    var server;

    jobname = document.getElementById(id).getAttribute("jobname");
    server  = document.getElementById(id).getAttribute("server");
    size    = document.getElementById(id).getAttribute("length");

    document = document.getElementById(id).innerHTML;

    if (size > 0) {
        document.getElementById(id).innerHTML = '';
        document.getElementById(job_id).setAttribute("length", 0);
        return;
    }

    job_id = id;

    x_ajax_jobinfo(server, jobname, jobinfo_cb);

}
